#ifndef MATERIAL_H
#define MATERIAL_H

class Material
{
  public:
  Material();
  ~Material();
  
  void setAmbient(const float r, const float g, const float b, const float a);
  void getAmbient(float &r, float &g, float &b, float &a);
  
  void setDiffuse(const float r, const float g, const float b, const float a);
  void getDiffuse(float &r, float &g, float &b, float &a);
  
  void setSpecular(const float r, const float g, const float b, const float a);
  void getSpecular(float &r, float &g, float &b, float &a);
  
  void setEmissive(const float r, const float g, const float b, const float a);
  void getEmissive(float &r, float &g, float &b, float &a);
  
  void setShininess(const float shininess);
  float getShininess();
  
  void display();
  
  protected:
  float _ambient[4];
  float _diffuse[4];
  float _specular[4];
  float _emissive[4];
  float _shininess;

};

class MaterialCreator
{
  public:
  static Material* createEmerald();
  static Material* createJade();
  static Material* createPearl();
  static Material* createRuby();
  static Material* createTurquoise();
  static Material* createBronze();
  static Material* createGold();
  static Material* createSilver();
  static Material* createChrome();
};

#endif

